package main

import (
	"fmt"
	"sync"
)

func main() {
	// 创建两个channel用于协程间通信
	ch1 := make(chan struct{})
	ch2 := make(chan struct{})
	var wg sync.WaitGroup
	wg.Add(2)

	// 第一个协程输出abcd
	go func() {
		defer wg.Done()

		// 等待第二个协程的信号
		<-ch1
		fmt.Print("a")
		fmt.Print("b")
		fmt.Print("c")
		fmt.Print("d")
		fmt.Println()
		// 通知第二个协程可以执行了
		ch2 <- struct{}{}

	}()

	// 第二个协程输出1234
	go func() {
		defer wg.Done()

		// 先发送信号给第一个协程
		ch1 <- struct{}{}
		// 等待第一个协程的信号
		<-ch2
		fmt.Print("1")
		fmt.Print("2")
		fmt.Print("3")
		fmt.Print("4")
		fmt.Println()

	}()

	wg.Wait()
}
